1
コピー制御の仕組み
AI037Lesson 16
00:00

C++ オブジェクトのライフサイクルを理解することは、 ヒープとスタックにおける存在そのもののメカニズムを掌握することです。コピー制御は、クラスが ライフサイクル を2つの操作を通じて管理する方法を定義します: コピーコンストラクタ および コピーアサインメント演算子

1. 初期化と代入の違い

直接初期化(例: string dots(10, '.'))はコンストラクタを直接呼び出します。しかし、 コピーオブジェクト初期化string s2 = dots)はコピーコンストラクタに依存します。初期化とは異なり、 代入trans = accum)は既存のオブジェクトを、 operator=を使って上書きします。重要な制約として、コピーコンストラクタのパラメータは参照型(const Foo&)でなければなりません。そうでない場合、値渡しで引数を渡すと、 無限再帰ループ コピー呼び出しの無限ループが発生します。

元オブジェクト[データ A]先オブジェクト[データ A]メンバーワイズコピーコピーコンストラクタ / operator=

2. 自動生成の役割

これらのメンバ関数を定義しない場合、コンパイラが 自動生成された メンバーワイズコピーを行うバージョンを提供します。注意:シンプルな型には十分ですが、動的メモリを管理するクラスではしばしば失敗し、ダングリングポインタや二重解放の原因になります。

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>